home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Skunkware 5
/
Skunkware 5.iso
/
man
/
cat.6
/
lev_comp.6
< prev
next >
Wrap
Text File
|
1995-07-25
|
20KB
|
595 lines
LLLLEEEEVVVV____CCCCOOOOMMMMPPPP((((6666)))) UUUUNNNNIIIIXXXX SSSSyyyysssstttteeeemmmm VVVV ((((22229999 DDDDeeeecccc 1111999999992222)))) LLLLEEEEVVVV____CCCCOOOOMMMMPPPP((((6666))))
NNNNAAAAMMMMEEEE
lev_comp - NetHack special levels compiler
SSSSYYYYNNNNOOOOPPPPSSSSIIIISSSS
lllleeeevvvv____ccccoooommmmpppp [ ----wwww ] [ _f_i_l_e_s ]
If no arguments are given, it reads standard input.
DDDDEEEESSSSCCCCRRRRIIIIPPPPTTTTIIIIOOOONNNN
_L_e_v__c_o_m_p is a special level compiler for NetHack version 3.1
and higher. It takes description files as arguments and
produces level files that can be loaded by NetHack at
runtime.
The purpose of this tool is to provide NetHack
administrators and implementors with a convenient way for
adding special levels to the game, or modifying existing
ones, without having to recompile the entire world.
The ----wwww option causes _l_e_v__c_o_m_p to perform extra checks on the
level and display extra warnings, however these warnings are
sometimes superfluous, so they are not normally displayed.
GGGGRRRRAAAAMMMMMMMMAAAARRRR
file : /* nothing */
| levels
levels : level
| level levels
level : maze_level
| room_level
maze_level : maze_def flags lev_init messages regions
room_level : level_def flags lev_init messages
rreg_init rooms corridors_def
level_def : "LEVEL" ':' string
lev_init : /* nothing */
| "INIT_MAP" ':' fgtyp ',' bgtyp ',' smooth ','
joined ',' light_state ',' walled
fgtyp : CHAR /* a MAP map_contents character */
bgtyp : CHAR /* a MAP map_contents character */
smooth : boolean
joined : boolean
Page 1 (printed 7/7/95)
LLLLEEEEVVVV____CCCCOOOOMMMMPPPP((((6666)))) UUUUNNNNIIIIXXXX SSSSyyyysssstttteeeemmmm VVVV ((((22229999 DDDDeeeecccc 1111999999992222)))) LLLLEEEEVVVV____CCCCOOOOMMMMPPPP((((6666))))
walled : boolean | "random"
flags : /* nothing */
| "FLAGS" ':' flag_list
flag_list : flag_type
| flag_type ',' flag_list
flag_type : "noteleport" | "hardfloor" | "nommap" | "shortsighted"
messages : /* nothing */
| message messages
message : "MESSAGE" ':' STRING
rreg_init : /* nothing */
| rreg_init init_rreg
init_rreg : "RANDOM_OBJECTS" ':' object_list
| "RANDOM_MONSTERS" ':' monster_list
rooms : /* nothing */
| roomlist
roomlist : aroom
| aroom rooms
corridors_def : random_corridors
| corridors
random_corridors: "RANDOM_CORRIDOR"
corridors : /* nothing */
| corridors corridor
corridor : "CORRIDOR" ':' corr_spec ',' corr_spec
| "CORRIDOR" ':' corr_spec ',' INTEGER
corr_spec : '(' INTEGER ',' direction ',' door_pos ')'
direction : "north" | "south" | "east" | "west"
aroom : room_def room_details
| subroom_def room_details
subroom_def : "SUBROOM" ':' room_type ',' light_state ','
subroom_pos ',' room_size ',' string
room_def : "ROOM" ':' room_type ',' light_state ','
room_pos ',' room_align ',' room_size
room_pos : '(' INTEGER ',' INTEGER ')'
Page 2 (printed 7/7/95)
LLLLEEEEVVVV____CCCCOOOOMMMMPPPP((((6666)))) UUUUNNNNIIIIXXXX SSSSyyyysssstttteeeemmmm VVVV ((((22229999 DDDDeeeecccc 1111999999992222)))) LLLLEEEEVVVV____CCCCOOOOMMMMPPPP((((6666))))
| "random"
subroom_pos : '(' INTEGER ',' INTEGER ')'
| "random"
room_align : '(' h_justif ',' v_justif ')'
| "random"
room_size : '(' INTEGER ',' INTEGER ')'
| "random"
room_details : /* nothing */
| room_details room_detail
room_detail : room_name
| room_chance
| room_door
| monster_detail
| object_detail
| trap_detail
| altar_detail
| fountain_detail
| sink_detail
| pool_detail
| gold_detail
| engraving_detail
| stair_detail
room_name : "NAME" ':' string
room_chance : "CHANCE" ':' INTEGER
room_door : "DOOR" ':' secret ',' door_state ','
door_wall ',' door_pos
secret : boolean
| "random"
door_wall : direction
| "random"
door_pos : INTEGER
| "random"
boolean : "true" | "false"
maze_def : "MAZE" ':' string ',' filling
filling : CHAR
| "random"
regions : aregion
| aregion regions
Page 3 (printed 7/7/95)
LLLLEEEEVVVV____CCCCOOOOMMMMPPPP((((6666)))) UUUUNNNNIIIIXXXX SSSSyyyysssstttteeeemmmm VVVV ((((22229999 DDDDeeeecccc 1111999999992222)))) LLLLEEEEVVVV____CCCCOOOOMMMMPPPP((((6666))))
aregion : map_definition reg_init map_details
map_definition : "NOMAP"
| map_geometry "MAP" map_contents "ENDMAP"
map_geometry : "GEOMETRY" ':' h_justif ',' v_justif
map_contents : /* see discussion below */
h_justif : "left" | "half-left" | "right" | "half-right"
| "center"
v_justif : "top" | "bottom"
| "center"
reg_init : /* nothing */
| reg_init init_reg
init_reg : "RANDOM_OBJECTS" ':' object_list
| "RANDOM_PLACES" ':' place_list
| "RANDOM_MONSTERS" ':' monster_list
object_list : object
| object ',' object_list
monster_list : monster
| monster ',' monster_list
place_list : place
| place ',' place_list
map_details : /* nothing */
| map_details map_detail
map_detail : monster_detail
| object_detail
| door_detail
| trap_detail
| drawbridge_detail
| region_detail
| stair_region
| portal_region
| teleprt_region
| branch_region
| altar_detail
| fountain_detail
| mazewalk_detail
| wallify_detail
| ladder_detail
| stair_detail
| gold_detail
| engraving_detail
Page 4 (printed 7/7/95)
LLLLEEEEVVVV____CCCCOOOOMMMMPPPP((((6666)))) UUUUNNNNIIIIXXXX SSSSyyyysssstttteeeemmmm VVVV ((((22229999 DDDDeeeecccc 1111999999992222)))) LLLLEEEEVVVV____CCCCOOOOMMMMPPPP((((6666))))
| diggable_detail
| passwall_detail
monster_detail : "MONSTER" ':' monster_c ',' m_name ',' coordinate
monster_infos
monster_infos : /* nothing */
| monster_infos monster_info
monster_info : ',' string
| ',' mon_attitude
| ',' mon_alertness
| ',' alignment
| ',' "m_feature" string
| ',' "m_monster" string
| ',' "m_object" string
mon_attitude : "peaceful" | "hostile"
mon_alertness : "asleep" | "awake"
object_detail : "OBJECT" ':' object_c ',' o_name ',' coordinate
object_infos
object_infos : /* nothing */
| ',' STRING ',' enchantment
| ',' curse_state ',' enchantment ',' art_name
curse_state : "random"
| "blessed" | "uncursed" | "cursed"
enchantment : INTEGER
| "random"
door_detail : "DOOR" ':' door_state ',' coordinate
trap_detail : "TRAP" ':' trap_name ',' coordinate
drawbridge_detail: "DRAWBRIDGE" ':' coordinate ','
direction ',' door_state
mazewalk_detail : "MAZEWALK" ':' coordinate ',' direction
wallify_detail : "WALLIFY"
ladder_detail : "LADDER" ':' coordinate ',' up_or_down
stair_detail : "STAIR" ':' coordinate ',' up_or_down
stair_region : "STAIR" ':' lev_region ',' lev_region ',' up_or_down
up_or_down: : "up" | "down"
Page 5 (printed 7/7/95)
LLLLEEEEVVVV____CCCCOOOOMMMMPPPP((((6666)))) UUUUNNNNIIIIXXXX SSSSyyyysssstttteeeemmmm VVVV ((((22229999 DDDDeeeecccc 1111999999992222)))) LLLLEEEEVVVV____CCCCOOOOMMMMPPPP((((6666))))
portal_region : "PORTAL" ':' lev_region ',' lev_region ',' string
teleprt_region : "TELEPORT_REGION" ':' lev_region
',' lev_region teleprt_detail
branch_region : "BRANCH" ':' lev_region ',' lev_region
teleprt_detail : /* empty */
| ',' up_or_down
lev_region : region
| "levregion"
'(' INTEGER ',' INTEGER ',' INTEGER ',' INTEGER ')'
fountain_detail : "FOUNTAIN" ':' coordinate
sink_detail : "SINK" ':' coordinate
pool_detail : "POOL" ':' coordinate
diggable_detail : "NON_DIGGABLE" ':' region
passwall_detail : "NON_PASSWALL" ':' region
region_detail : "REGION" ':' region ',' light_state ','
room_type prefilled
altar_detail : "ALTAR" ':' coordinate ',' alignment ',' altar_type
gold_detail : "GOLD" ':' amount ',' coordinate
engraving_detail: "ENGRAVING" ':' coordinate ','
engraving_type ',' string
monster_c : monster
| "random"
| m_register
object_c : object
| "random"
| o_register
m_name : string
| "random"
o_name : string
| "random"
trap_name : string
| "random"
room_type : string
Page 6 (printed 7/7/95)
LLLLEEEEVVVV____CCCCOOOOMMMMPPPP((((6666)))) UUUUNNNNIIIIXXXX SSSSyyyysssstttteeeemmmm VVVV ((((22229999 DDDDeeeecccc 1111999999992222)))) LLLLEEEEVVVV____CCCCOOOOMMMMPPPP((((6666))))
| "random"
prefilled : /* empty */
| ',' filling
| ',' filling ',' irregular
filling : "filled" | "unfilled"
irregular : boolean /* irregular shaped room around region */
coordinate : coord
| p_register
| "random"
door_state : "open" | "closed" | "locked" | "nodoor" | "broken"
| "random"
light_state : "lit" | "unlit"
| "random"
alignment : "noalign" | "law" | "neutral" | "chaos"
| a_register
| "random"
altar_type : "sanctum" | "shrine" | "altar"
| "random"
p_register : "place" '[' INTEGER ']'
o_register : "object" '[' INTEGER ']'
m_register : "monster" '[' INTEGER ']'
a_register : "align" '[' INTEGER ']'
place : coord
monster : CHAR
object : CHAR
string : STRING
art_name : STRING
| "none"
amount : INTEGER
| "random"
engraving_type : "dust" | "engrave" | "burn" | "mark"
| "random"
Page 7 (printed 7/7/95)
LLLLEEEEVVVV____CCCCOOOOMMMMPPPP((((6666)))) UUUUNNNNIIIIXXXX SSSSyyyysssstttteeeemmmm VVVV ((((22229999 DDDDeeeecccc 1111999999992222)))) LLLLEEEEVVVV____CCCCOOOOMMMMPPPP((((6666))))
coord : '(' INTEGER ',' INTEGER ')'
region : '(' INTEGER ',' INTEGER ',' INTEGER ',' INTEGER ')'
_N_O_T_E:
Lines beginning with '#' are considered comments.
The contents of a "MAP" description of a maze is a rectangle
showing the exact level map that should be used for the
given part of a maze. Each character in the map corresponds
to a location on the screen. Different location types are
denoted using different ASCII characters. The following
characters are recognized. To give an idea of how these are
used, see the EXAMPLE, below. The maximum size of a map is
normally 76 columns by 21 rows.
'-' horizontal wall
'|' vertical wall
'+' a doorway (state is specified in a DOOR declaration)
'A' open air
'B' boundary room location (for bounding unwalled irregular regions)
'C' cloudy air
'I' ice
'S' a secret door
'H' a secret corridor
'{' a fountain
'\' a throne
'K' a sink (if SINKS is defined, else a room location)
'}' a part of a moat or other deep water
'P' a pool
'L' lava
'#' a corridor
'.' a normal room location (unlit unless lit in a REGION declaration)
' ' stone
EEEEXXXXAAAAMMMMPPPPLLLLEEEE
Here is an example of a description file (a very simple
one):
MAZE : "fortress", random
GEOMETRY : center , center
MAP
}}}}}}}}}
}}}|-|}}}
}}|-.-|}}
}|-...-|}
}|.....|}
}|-...-|}
}}|-.-|}}
}}}|-|}}}
}}}}}}}}}
ENDMAP
Page 8 (printed 7/7/95)
LLLLEEEEVVVV____CCCCOOOOMMMMPPPP((((6666)))) UUUUNNNNIIIIXXXX SSSSyyyysssstttteeeemmmm VVVV ((((22229999 DDDDeeeecccc 1111999999992222)))) LLLLEEEEVVVV____CCCCOOOOMMMMPPPP((((6666))))
MONSTER: '@', "Wizard of Yendor", (4,4)
OBJECT: '"', "Amulet of Yendor", (4,4)
# a hell hound flanking the Wiz on a random side
RANDOM_PLACES: (4,3), (4,5), (3,4), (5,4)
MONSTER: 'd', "hell hound", place[0]
# a chest on another random side
OBJECT: '(', "chest", place[1]
# a random dragon somewhere
MONSTER: 'D', random, random
# a random trap in the EAST end
TRAP: random, (6,4)
# an electric eel below the SOUTH end
MONSTER: ';', "electric eel", (4,8)
# make the walls non-diggable
NON_DIGGABLE: (0,0,8,8)
TELEPORT_REGION: lev_region(0,0,79,20), (0,0,8,8)
This example will produce a file named "fortress" that can
be integrated into one of the numerous mazes of the game.
Note especially the final, TELEPORT_REGION specification.
This says that level teleports or other non-stairway
arrivals on this level can land anywhere on the level except
the area of the map. This shows the use of the
``lev_region'' prefix allowed in certain region
specifications. Normally, regions apply only to the most
recent MAP specification, but when prefixed with
``lev_region'', one can refer to any area of the level,
regardless of the placement of the current MAP in the level.
AAAAUUUUTTTTHHHHOOOORRRR
Jean-Christophe Collet, David Cohrs.
SSSSEEEEEEEE AAAALLLLSSSSOOOO
dgn_comp(6), nethack(6)
BBBBUUUUGGGGSSSS
Probably infinite. Most importantly, still needs additional
bounds checking.
Page 9 (printed 7/7/95)